package com.chenwc.util.translate.youdao.util;

import com.chenwc.util.translate.youdao.constant.YouDaoConstant;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;

/**
 * 生成签名工具类
 *
 * @author chenwc
 * @package com.chenwc.util.translate.youdao.util
 * @project wso2-sinicization
 * @date 2024/5/25
 */
public class YoudaoAuthUtil {
    /**
     * 获取签名字符串
     *
     * @param q       待翻译文本
     * @param curtime 时间戳
     * @param salt    盐
     * @return 签名
     */
    public static String getSignString(String q, String curtime, String salt) {
        return getSha256(YouDaoConstant.APP_ID + getInputString(q) + salt + curtime + YouDaoConstant.APP_KEY);
    }

    /**
     * SHA-256哈希字符串
     *
     * @param original 待加密字符串
     * @return SHA哈希加密后字符串
     */
    private static String getSha256(String original) {
        return DigestUtils.sha256Hex(original);
    }

    /**
     * 获取当前UTC时间戳(秒)
     *
     * @return 当前UTC时间戳(秒)
     */
    public static String getCurtime() {
        return String.valueOf(System.currentTimeMillis() / 1000);
    }

    /**
     * input的计算方式为：input=q前10个字符 + q长度 + q后10个字符（当q长度大于20）或 input=q字符串（当q长度小于等于20）
     *
     * @param q 待翻译文本
     * @return input
     */
    private static String getInputString(String q) {

        if (StringUtils.isEmpty(q)) {
            return null;
        }
        int len = q.length();
        return len <= 20 ? q : (q.substring(0, 10) + len + q.substring(len - 10, len));
    }
}
